package com.mycode.composite09.model;

import java.util.ArrayList;
import java.util.List;

// 容器组件：提供一个几个用于存储子节点，实现了在抽象组件中定义的行为，在其业务方法中可以递归调用其子节点的业务方法
public class Composite extends Component{

    // 存储子组件
    private List<Component> list = new ArrayList<>();

    @Override
    public void add(Component component) {
        list.add(component);
    }

    @Override
    public void remove(Component component) {
        list.remove(component);
    }

    @Override
    public Component getChild(int i) {
        return list.get(i);
    }

    @Override
    public void operation() {
        // 容器组件具体业务方法的实现
        // 递归调用成员组件的业务方法
        for (Component component : list) {
            component.operation();
        }
    }
}
